﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;


namespace Atentis_Connector
{
	/// <summary>
	/// Список свечек.
	/// </summary>
	class CandleList
	{
		/// <summary>
		/// Базовый список свечек
		/// </summary>
		public List<Candle> Candles = new List<Candle>();
		public List<WrapperAll_Trades> Trades = new List<WrapperAll_Trades>();

		public string Name;
		/// <summary>
		/// Период в секундах
		/// </summary>
		public int Period;

		/// <summary>
		/// Добавлена новая свеча: свеча, название,период
		/// </summary>
		public event Action<Candle> CandleAdded;
		/// <summary>
		/// Изменена новая свеча: свеча, название,период
		/// </summary>
		public event Action<Candle> CandleChanged;

		private DateTime m_LastTime;

		public void AddTick(WrapperAll_Trades newtrade)
		{
			newtrade.TradeTime = newtrade.TradeTime.AddSeconds(Period);
			Trades.Add(newtrade);
			//Если первая свеча
			if (Candles.Count == 0)
			{
				DateTime startTime = newtrade.TradeTime.AddSeconds(-newtrade.TradeTime.Second);
				m_LastTime = startTime;
				Candle candle = new Candle(startTime, newtrade.SecCode, newtrade.Price, newtrade.Quantity, this.Period);
				this.Candles.Add(candle);
				return;
			}

			//Определяем, создать новую свечку или изменить старую
			if (m_LastTime.AddSeconds(Period) <= newtrade.TradeTime)
			{
				m_LastTime = m_LastTime.AddSeconds(Period);
				//Candle candle = new Candle(newtrade.TradeTime.AddSeconds(-newtrade.TradeTime.Second), newtrade.SecCode, newtrade.Price, newtrade.Quantity, this.Period);
				Candle candle = new Candle(m_LastTime, newtrade.SecCode, newtrade.Price, newtrade.Quantity, this.Period);

				this.Candles.Add(candle);

				if (CandleAdded != null)
				{ CandleAdded(Candles.Last()); }

			}
			else
			{
				if (newtrade.Price > Candles.Last().High) { Candles.Last().High = newtrade.Price; }
				if (newtrade.Price < Candles.Last().Low) { Candles.Last().Low = newtrade.Price; }
				Candles.Last().Close = newtrade.Price;
				Candles.Last().Volume += newtrade.Quantity;

				if (CandleChanged != null)
				{ CandleChanged(Candles.Last()); }
			}
		}

	}
}
